package com.kty.utils;

import com.kty.entity.SixtyFourTrigram;
import com.kty.controller.MHYSController;

/**
 * 根据 '上卦'和'下卦' 的组成判断 → 本卦信息 和 本卦图形
 * <p>
 * <p>
 * 乾1  兑2  离3  震4  巽5  坎6  艮7  坤8
 *
 * <p>
 * 1、乾上乾下 乾为天卦    ䷀	1 + 1 = 1
 * 2、坤上坤下 坤为地卦    ䷁	8 + 8 = 2
 * 3、坎上震下 水雷屯卦    ䷂	6 + 4 = 3
 * 4、艮上坎下 山水蒙卦    ䷃	7 + 6 = 4
 * 5、坎上乾下 水天需卦    ䷄	6 + 1 = 5
 * 6、乾上坎下 天水讼卦    ䷅	1 + 6 = 6
 * 7、坤上坎下 地水师卦    ䷆	8 + 6 = 7
 * 8、坎上坤下 水地比卦    ䷇	6 + 8 = 8
 * 9、巽上乾下 风天小畜卦  ䷈	5 + 1 = 9
 * 10、乾上兑下 天泽履卦   ䷉	1 + 2 = 10
 * 11、坤上乾下 地天泰卦   ䷊	8 + 1 = 11
 * 12、乾上坤下 天地否卦   ䷋	1 + 8 = 12
 * 13、乾上离下 天火同人卦 ䷌	1 + 3 = 13
 * 14、离上乾下 火天大有卦 ䷍	3 + 1 = 14
 * 15、坤上艮下 地山谦卦   ䷎	8 + 7 = 15
 * 16、震上坤下 雷地豫卦   ䷏	4 + 8 = 16
 * 17、兑上震下 泽雷随卦   ䷐	2 + 4 = 17
 * 18、艮上巽下 山风蛊卦   ䷑	7 + 5 = 18
 * 19、坤上兑下 地泽临卦   ䷒	8 + 2 = 19
 * 20、巽上坤下 风地观卦   ䷓	5 + 8 = 20
 * 21、离上震下 火雷噬嗑卦 ䷔	3 + 4 = 21
 * 22、艮上离下 山火贲卦   ䷕	7 + 3 = 22
 * 23、艮上坤下 山地剥卦   ䷖	7 + 8 = 23
 * 24、坤上震下 地雷复卦   ䷗	8 + 4 = 24
 * 25、乾上震下 天雷无妄卦 ䷘	1 + 4 = 25
 * 26、艮上乾下 山天大畜卦 ䷙	7 + 1 = 26
 * 27、艮上震下 山雷颐卦   ䷚	7 + 4 = 27
 * 28、兑上巽下 泽风大过卦 ䷛	2 + 5 = 28
 * 29、坎上坎下 坎为水卦   ䷜	6 + 6 = 29
 * 30、离上离下 离为火卦   ䷝	3 + 3 = 30
 * 31、兑上艮下 泽山咸卦   ䷞	2 + 7 = 31
 * 32、震上巽下 雷风恒卦   ䷟	4 + 5 = 32
 * 33、乾上艮下 天山遁卦   ䷠	1 + 7 = 33
 * 34、震上乾下 雷天大壮卦 ䷡	4 + 1 = 34
 * 35、离上坤下 火地晋卦   ䷢	3 + 8 = 35
 * 36、坤上离下 地火明夷卦 ䷣	8 + 3 = 36
 * 37、巽上离下 风火家人卦 ䷤	5 + 3 = 37
 * 38、离上兑下 火泽睽卦   ䷥	3 + 2 = 38
 * 39、坎上艮下 水山蹇卦   ䷦	6 + 7 = 39
 * 40、震上坎下 雷水解卦   ䷧	4 + 6 = 40
 * 41、艮上兑下 山泽损卦   ䷨	7 + 2 = 41
 * 42、巽上震下 风雷益卦   ䷩	5 + 4 = 42
 * 43、兑上乾下 泽天夬卦   ䷪	2 + 1 = 43
 * 44、乾上巽下 天风姤卦   ䷫	1 + 5 = 44
 * 45、兑上坤下 泽地萃卦   ䷬	2 + 8 = 45
 * 46、坤上巽下 地风升卦   ䷭	8 + 5 = 46
 * 47、兑上坎下 泽水困卦   ䷮	2 + 6 = 47
 * 48、坎上巽下 水风井卦   ䷯	6 + 5 = 48
 * 49、兑上离下 泽火革卦   ䷰	2 + 3 = 49
 * 50、离上巽下 火风鼎卦   ䷱	3 + 5 = 50
 * 51、震上震下 震为雷卦   ䷲	4 + 4 = 51
 * 52、艮上艮下 艮为山卦   ䷳	7 + 7 = 52
 * 53、巽上艮下 风山渐卦   ䷴	5 + 7 = 53
 * 54、震上兑下 雷泽归妹卦 ䷵	4 + 2 = 54
 * 55、震上离下 雷火丰卦   ䷶	4 + 3 = 55
 * 56、离上艮下 火山旅卦   ䷷ 	3 + 7 = 56
 * 57、巽上巽下 巽为风卦   ䷸	5 + 5 = 57
 * 58、兑上兑下 兑为泽卦   ䷹	2 + 2 = 58
 * 59、巽上坎下 风水涣卦   ䷺	5 + 6 = 59
 * 60、坎上兑下 水泽节卦   ䷻	6 + 2 = 60
 * 61、巽上兑下 风泽中孚卦 ䷼	5 + 2 = 61
 * 62、震上艮下 雷山小过卦 ䷽	4 + 7 = 62
 * 63、坎上离下 水火既济卦 ䷾	6 + 3 = 63
 * 64、离上坎下 火水未济卦 ䷿	3 + 6 = 64
 */
public class BenGua {

    private static final SixtyFourTrigram sft = new SixtyFourTrigram();

    // 获取 六十四卦 字符数组
    private static final String[] lssg = sft.getLssg();
    // 获取 六十四卦图 字符串
    private static final String lssgt = sft.getLssgt();


    /**
     * 根据 '上卦' 和 '下卦' 的组成 判断 '本卦'并返回 本卦图形
     */
    public static String benGuaTu() {

        int sgs = MHYSController.getUpperHexagramNumber(); // 上卦数
        int xgs = MHYSController.getDivinationNumber(); // 下卦数

        return TuXing(sgs, xgs);

    }


    /**
     * 本卦图形
     *
     * @param sgs
     * @param xgs
     * @return
     */
    public static String TuXing(int sgs, int xgs) {

        // 定义临时变量，用于记录 本卦图形
        String tx = null;
        // 遍历
        for (int i = 0; i < lssgt.length(); i++) {

            //判断（上卦数、下卦数）
            if (sgs == 1 && xgs == 1) {
                tx = tx(lssgt, 1); // 乾为天卦（䷀）
                break;
            }
            if (sgs == 8 && xgs == 8) {
                tx = tx(lssgt, 2); // 坤为地卦（䷁）
                break;
            }
            if (sgs == 6 && xgs == 4) {
                tx = tx(lssgt, 3); // 水雷屯卦（䷂）
                break;
            }
            if (sgs == 7 && xgs == 6) {
                tx = tx(lssgt, 4); // 山水蒙卦（䷃）
                break;
            }
            if (sgs == 6 && xgs == 1) {
                tx = tx(lssgt, 5); // 水天需卦 （䷄）
                break;
            }
            if (sgs == 1 && xgs == 6) {
                tx = tx(lssgt, 6); // 天水讼卦（䷅）
                break;
            }
            if (sgs == 8 && xgs == 6) {
                tx = tx(lssgt, 7); // 地水师卦（䷆）
                break;
            }
            if (sgs == 6 && xgs == 8) {
                tx = tx(lssgt, 8); // 水地比卦（䷇）
                break;
            }
            if (sgs == 5 && xgs == 1) {
                tx = tx(lssgt, 9); // 风天小畜卦（䷈）
                break;
            }
            if (sgs == 1 && xgs == 2) {
                tx = tx(lssgt, 10); // 天泽履卦（䷉）
                break;
            }
            if (sgs == 8 && xgs == 1) {
                tx = tx(lssgt, 11); // 地天泰卦（䷊）
                break;
            }
            if (sgs == 1 && xgs == 8) {
                tx = tx(lssgt, 12); // 天地否卦（䷋）
                break;
            }
            if (sgs == 1 && xgs == 3) {
                tx = tx(lssgt, 13); // 天火同人卦（䷌）
                break;
            }
            if (sgs == 3 && xgs == 1) {
                tx = tx(lssgt, 14); // 火天大有卦（䷍）
                break;
            }
            if (sgs == 8 && xgs == 7) {
                tx = tx(lssgt, 15); // 地山谦卦（䷎）
                break;
            }
            if (sgs == 4 && xgs == 8) {
                tx = tx(lssgt, 16); // 雷地豫卦（䷏）
                break;
            }
            if (sgs == 2 && xgs == 4) {
                tx = tx(lssgt, 17); // 泽雷随卦（䷐）
                break;
            }
            if (sgs == 7 && xgs == 5) {
                tx = tx(lssgt, 18); // 山风蛊卦（䷑）
                break;
            }
            if (sgs == 8 && xgs == 2) {
                tx = tx(lssgt, 19); // 地泽临卦（䷒）
                break;
            }
            if (sgs == 5 && xgs == 8) {
                tx = tx(lssgt, 20); // 风地观卦（䷓）
                break;
            }
            if (sgs == 3 && xgs == 4) {
                tx = tx(lssgt, 21); // 火雷噬嗑卦（䷔）
                break;
            }
            if (sgs == 7 && xgs == 3) {
                tx = tx(lssgt, 22); // 山火贲卦（䷕）
                break;
            }
            if (sgs == 7 && xgs == 8) {
                tx = tx(lssgt, 23); // 山地剥卦（䷕）
                break;
            }
            if (sgs == 8 && xgs == 4) {
                tx = tx(lssgt, 24); // 地雷复卦（䷗）
                break;
            }
            if (sgs == 1 && xgs == 4) {
                tx = tx(lssgt, 25); // 天雷无妄卦（䷘）
                break;
            }
            if (sgs == 7 && xgs == 1) {
                tx = tx(lssgt, 26); // 山天大畜卦（䷙）
                break;
            }
            if (sgs == 7 && xgs == 4) {
                tx = tx(lssgt, 27); // 山雷颐卦（䷚）
                break;
            }
            if (sgs == 2 && xgs == 5) {
                tx = tx(lssgt, 28); // 泽风大过卦（䷛）
                break;
            }
            if (sgs == 6 && xgs == 6) {
                tx = tx(lssgt, 29); // 坎为水卦（䷜）
                break;
            }
            if (sgs == 3 && xgs == 3) {
                tx = tx(lssgt, 30); // 离为火卦（䷝）
                break;
            }
            if (sgs == 2 && xgs == 7) {
                tx = tx(lssgt, 31); // 泽山咸卦（䷞）
                break;
            }
            if (sgs == 4 && xgs == 5) {
                tx = tx(lssgt, 32); // 雷风恒卦（䷟）
                break;
            }
            if (sgs == 1 && xgs == 7) {
                tx = tx(lssgt, 33); // 天山遁卦（䷠）
                break;
            }
            if (sgs == 4 && xgs == 1) {
                tx = tx(lssgt, 34); // 雷天大壮卦（䷡）
                break;
            }
            if (sgs == 3 && xgs == 8) {
                tx = tx(lssgt, 35); // 火地晋卦（䷢）
                break;
            }
            if (sgs == 8 && xgs == 3) {
                tx = tx(lssgt, 36); // 地火明夷卦（䷣）
                break;
            }
            if (sgs == 5 && xgs == 3) {
                tx = tx(lssgt, 37); // 风火家人卦（䷤）
                break;
            }
            if (sgs == 3 && xgs == 2) {
                tx = tx(lssgt, 38); // 火泽睽卦（䷥）
                break;
            }
            if (sgs == 6 && xgs == 7) {
                tx = tx(lssgt, 39); // 水山蹇卦 （䷦）
                break;
            }
            if (sgs == 4 && xgs == 6) {
                tx = tx(lssgt, 40); // 雷水解卦（䷧）
                break;
            }
            if (sgs == 7 && xgs == 2) {
                tx = tx(lssgt, 41); // 山泽损卦（䷨）
                break;
            }
            if (sgs == 5 && xgs == 4) {
                tx = tx(lssgt, 42); // 风雷益卦（䷩）
                break;
            }
            if (sgs == 2 && xgs == 1) {
                tx = tx(lssgt, 43); // 泽天夬卦（䷪）
                break;
            }
            if (sgs == 1 && xgs == 5) {
                tx = tx(lssgt, 44); // 天风姤卦（䷫）
                break;
            }
            if (sgs == 2 && xgs == 8) {
                tx = tx(lssgt, 45); // 泽地萃卦（䷬）
                break;
            }
            if (sgs == 8 && xgs == 5) {
                tx = tx(lssgt, 46); // 地风升卦（䷭）
                break;
            }
            if (sgs == 2 && xgs == 6) {
                tx = tx(lssgt, 47); // 泽水困卦（䷮）
                break;
            }
            if (sgs == 6 && xgs == 5) {
                tx = tx(lssgt, 48); // 水风井卦（䷯）
                break;
            }
            if (sgs == 2 && xgs == 3) {
                tx = tx(lssgt, 49); // 泽火革卦（䷰）
                break;
            }
            if (sgs == 3 && xgs == 5) {
                tx = tx(lssgt, 50); // 火风鼎卦（䷱）
                break;
            }
            if (sgs == 4 && xgs == 4) {
                tx = tx(lssgt, 51); // 震为雷卦（䷲）
                break;
            }
            if (sgs == 7 && xgs == 7) {
                tx = tx(lssgt, 52); // 艮为山卦（䷳）
                break;
            }
            if (sgs == 5 && xgs == 7) {
                tx = tx(lssgt, 53); // 风山渐卦（䷴）
                break;
            }
            if (sgs == 4 && xgs == 2) {
                tx = tx(lssgt, 54); // 雷泽归妹卦（䷵）
                break;
            }
            if (sgs == 4 && xgs == 3) {
                tx = tx(lssgt, 55); // 雷火丰卦（䷶）
                break;
            }
            if (sgs == 3 && xgs == 7) {
                tx = tx(lssgt, 56); // 火山旅卦（䷷）
                break;
            }
            if (sgs == 5 && xgs == 5) {
                tx = tx(lssgt, 57); // 巽为风卦（䷸）
                break;
            }
            if (sgs == 2 && xgs == 2) {
                tx = tx(lssgt, 58); // 兑为泽卦（䷹）
                break;
            }
            if (sgs == 5 && xgs == 6) {
                tx = tx(lssgt, 59); // 风水涣卦（䷺）
                break;
            }
            if (sgs == 6 && xgs == 2) {
                tx = tx(lssgt, 60); // 水泽节卦（䷻）
                break;
            }
            if (sgs == 5 && xgs == 2) {
                tx = tx(lssgt, 61); // 风泽中孚卦（䷼）
                break;
            }
            if (sgs == 4 && xgs == 7) {
                tx = tx(lssgt, 62); // 雷山小过卦（䷽）
                break;
            }
            if (sgs == 6 && xgs == 3) {
                tx = tx(lssgt, 63); // 水火既济卦（䷾）
                break;
            }
            if (sgs == 3 && xgs == 6) {
                tx = tx(lssgt, 64); // 火水未济卦（䷿）
            }
        }
        return tx;
    }


    /**
     * 根据（上卦数+下卦数）返回 六十四卦图形
     *
     * @param lssg
     * @param index
     * @return
     */
    private static String tx(String lssg, int index) {

        // 根据index索引值获取 六十四卦图形
        return String.valueOf(lssg.charAt(index - 1));

    }


    /**
     * 根据 本卦图形 返回对应的 本卦索引值
     */
    public static int benGuaIndex() {

        String bgt = benGuaTu(); // 本卦图形

        return getIndex(bgt); // 本卦索引值

    }


    /**
     * 判断本卦索引值，并返回
     *
     * @param bgt
     * @return
     */
    public static int getIndex(String bgt) {

        // 临时记录 本卦索引值
        int index = 0;
        // 遍历
        for (int i = 0; i < lssgt.length(); i++) {
            // 取出字符串中的每一个元素
            String s = String.valueOf(lssgt.charAt(i));
            // 比较，若相同，则返回该元素对应的索引值
            if (s.equals(bgt)) {
                index = lssgt.indexOf(bgt);
                break;
            }
        }
        return index;

    }


    /**
     * 根据 本卦图形的索引值 返回对应的 本卦信息
     */
    public static String benGua() {

        int index = benGuaIndex(); // 索引值

        // 返回对应 本卦信息
        return lssg[index];

    }


}
